/**
 * 
 */
package com.sunwayhorizo.health.business.clinic.emr.document;

import java.util.List;
import java.util.Map;

import javax.ejb.Local;

import com.sunwayhorizo.health.business.dto.clinic.emr.document.EmrWriterDTO;
import com.sunwayhorizo.health.hl7.common.Hl7Exception;
import com.sunwayhorizo.health.hl7.datatypes.CS;
import com.sunwayhorizo.health.hl7.rim.Document;
import com.sunwayhorizo.health.hl7.rim.Observation;
import com.sunwayhorizo.health.hl7.rim.Role;

/**
 * @ClassName EmrCommonManagerLocal <br>
 * @PackageName com.sunwayhorizo.health.business.clinic.emr.document <br>
 * @Description 电子病历书写公共部分<br>
 * @Author jinzw <br>
 * @Date 2011-1-15 <br>
 * @Version 1.0 <br>
 * @ModifiedDesc <br>
 * @ModifiedDate <br>
 * @ModifiedBy <br>
 * @Copyright 2010-2020 北京三维海容 All Rights Reserved. <br>
 */
@Local
public interface DocumentCommonManagerLocal {
	
	/**
	 * 病历书写方法(所有的病历书写全部用此方法，区分不同文书类型的病历用code值来区分)
	 * @param code  区分不同文书类型的code值
	 * @return
	 * @throws Hl7Exception
	 */
    public Document creatClinicalDocument(String code) throws Hl7Exception ;
	
	/**
	 * 删除电子病历
	 * @param ids
	 * @return "1"删除成功   "-1"删除失败
	 * @throws Hl7Exception
	 */
	@SuppressWarnings("rawtypes")
	public String delDoc(List ids) throws Hl7Exception;
	
	/**
	 * 根据电子病历分类，查询单个电子病历
	 * 包含二进制数据
	 * @param emrClassRoleId 电子病历分类角色id
	 * @return
	 * @throws Hl7Exception
	 */
	public Document findDoc(String emrClassRoleId) throws Hl7Exception;
	
	
	/**
	 * 病历书写中涉及到的公共角色参与到书写动作
	 * @param emr 病历书写信息
	 * @param doc  动作信息
	 * @throws Hl7Exception
	 */
	public void setParticipation(EmrWriterDTO emr, Document doc) throws  Hl7Exception;
	
	/**
	 * 设置病历签名信息
	 * @param emr
	 * @param doc
	 * @throws Hl7Exception
	 */
	public void setSignatureInfo(EmrWriterDTO emr, Document doc) throws Hl7Exception;
	
	
	/**
	 * 将EmrWriterDTO信息添加到书写动作中
	 * @param emr 病历书写信息
	 * @param document 病历书写动作
	 * @return
	 * @throws Hl7Exception
	 */
	public Document injectDtoToDoc(EmrWriterDTO emr, Document document) throws Hl7Exception;
	
	/**
	 * 将EmrWriterDTO信息添加到Document中
	 * 添加的信息中不包含文件内容
	 * @param emr
	 * @param document
	 * @return
	 * @throws Hl7Exception
	 */
	public Document injectDtoToDocNotFile(EmrWriterDTO emr, Document document) throws Hl7Exception;
	
	/**
	 * 根据条件查询出的病历信息添加到EmrWriterDTO中
	 * @param doc 病历书写动作
	 * @return
	 * @throws Hl7Exception
	 */
	public EmrWriterDTO convertDocToDto(Document doc) throws Hl7Exception;
	
	
	/**
	 * 根据已查询出来的属性组装EmrWriterDTO
	 * 该数据源的查询参数必须遵循与InpatientRecordsManager.findEmrByPatientID方法
	 * @param list
	 * @return
	 * @throws Hl7Exception
	 */
	@SuppressWarnings("rawtypes")
	public List<EmrWriterDTO> convertDtoToList(List list) throws Hl7Exception;
	
	 /**
     * 设置Document与诊断动作的关系
     * @param doc
     * @param emr
     * @throws Hl7Exception
     */
	public void setRelationship(Document doc,EmrWriterDTO emr) throws Hl7Exception;
	
	/**
	 * 拿到签名的三级医生角色
	 * @param emr
	 * @return
	 * @throws Hl7Exception
	 */
	public Map<CS,Role> findWriteEmrParticiRole(EmrWriterDTO emr) throws Hl7Exception;
	
	/**
	 * 构建Participation列表，把所有的角色加入到List列表中，为与病历书写动作建立关系做准备
	 * @param socopeMap 参与到病历书写动作中的map集合
	 * @param emr 病历书写动作DTO
	 * @throws Hl7Exception
	 */
//	public void constructParticipationList(Map<CS,Role> socopeMap,EmrWriterDTO emr) throws Hl7Exception;
	
	/**
	 * 拿到诊断信息
	 * @param emr
	 * @return
	 * @throws Hl7Exception
	 */
	public List<Observation> findObservationList(EmrWriterDTO emr) throws Hl7Exception;
	
	/**
	 * 修改患者的宏元素
	 * @param doc 包含宏员素的动作
	 * @param macroContents 宏员素json字符串
	 * @throws Hl7Exception
	 */
	public void modifyMacro(Document doc,String macroContents) throws Hl7Exception;
	
}
